#include "Matriz.h"

Matriz::Matriz()
{
    tam = 0;
}

Matriz::Matriz(int n, int m)
{
    matrix.resize(n);
    for(int i = 0; i < n; i++)
    {
        (matrix[i]).resize(m);
        for(int j = 0; j < m; j++)
        {
            matrix[i][j] = 0;
        }
    }
    tam=n;
}
void Matriz::Resize(int n, int m)
{
    matrix.resize(n);
    for(int i = 0; i < n; i++)
    {
        (matrix[i]).resize(m);
        for(int j = 0; j < m; j++)
        {
            matrix[i][j] = 0;
        }
    }
    tam=n;
}

Matriz::~Matriz()
{}

int Matriz::size()
{
    return tam;
}

void Matriz::set(int i , int j, double x)
{
    matrix[i-1][j-1] = x;
}


double Matriz::get(int i, int j)
{
    return matrix[i-1][j-1];
}


void Matriz::print(int x)
{
    ofstream pepe;
    pepe.open("./matriz.txt",ios::app);

    for(int i=0; i<tam; i++)
    {
        for(int j=0; j<tam; j++)
        {
            pepe<< setprecision(x)<<setw(7*x/4)<<matrix[i][j]<<" ";
        }
        pepe<<endl;
    }
    pepe<<endl;
    pepe.close();
}

void Matriz::agregarColumna(vector<double> b)      // agrega el vector b para gauss
{
    for(int i = 0; i < tam; i++)
    {
        matrix[i].push_back(b[i]);
    }
}


void Matriz::invertir()
{

    for(int i = 0; i < tam; i++)
    {
        matrix[i][i]= 1/matrix[i][i];
    }

}

Matriz Matriz::trasponer()
{

    Matriz res(tam,tam);

    for(int i = 1; i <= tam; i++)
    {
        for(int j = 1; j <= tam; j++)
        {
            res.matrix[i-1][j-1] = matrix[j-1][i-1];
        }
    }
    return res;
}



Matriz Matriz::multiplicar(Matriz B)
{
    Matriz C(tam,tam);

    double suma;

    for(int i = 0; i < tam; i++)
    {
        for(int j = 0; j < tam; j++)
        {
            suma=0;

            for(int k = 0; k < tam; k++)
            {

                suma += matrix[i][k] * B.matrix[k][j];
            }

            C.matrix[i][j] = suma;

        }

    }
    return C;
}



void Matriz::redondear()
{
    for(int i = 0; i < tam; i++)
    {

        for(int j = 0; j < tam; j++)
        {
            if(fabs(matrix[i][j]) < 0.000000000000001){matrix[i][j]=0;}
        }
    }
}
